package com.itheima.dao;

import com.github.pagehelper.Page;
import com.itheima.pojo.Menu;
import org.apache.ibatis.annotations.Param;

import java.util.LinkedHashSet;
import java.util.List;

/**
 * @author W.J.Y
 */
public interface MenuDao {


    /**
     * 根据菜单ID查询菜单信息
     * @param id    菜单ID
     * @return  返回结果
     */
    Menu findById(@Param("menuId") int id);

    /**
     * 根据查询语句分页查询信息
     * @param queryString   查询语句
     * @return  分页信息
     */
    Page<Menu> findPage(@Param("queryString") String queryString);

    /**
     * 根据ID删除菜单
     * @param id    菜单ID
     */
    void delete(@Param("menuId") int id);

    /**
     * 添加菜单与角色的关联关系
     * @param menuId    菜单ID
     * @param roleId    角色ID
     */
    void setRoleAndMenu(@Param("menuId") Integer menuId, @Param("roleId") Integer roleId);

    /**
     * 删除菜单与角色的关联关系
     * @param id    菜单ID
     */
    void deleteRoleSByMenuId(@Param("menuId") Integer id);

    /**
     * 更新菜单信息
     * @param menu  菜单实例
     */
    void update(Menu menu);

    /**
     * 根据菜单链接查询菜单数量
     * @param menu  菜单实例
     * @return  菜单数量
     */
    Integer findByLinkUrl(Menu menu);

    /**
     * 设置菜单与角色的关联关系
     * @param id    菜单ID
     * @param roleId    角色ID
     */
    void setMenuAndRole(@Param("menuId") Integer id, @Param("roleId") Integer roleId);

    /**
     * 添加菜单基础信息
     * @param menu  菜单实例
     */
    void add(Menu menu);

    /**
     * 根据菜单ID查找父级菜单
     * @param id    菜单ID
     * @return  父级菜单
     */
    Menu findParentMenuById(@Param("menuId") int id);

    /**
     * 根据菜单ID查找子级菜单
     * @param id    菜单ID
     * @return  子级菜单
     */
    List<Menu> findChildrenById(@Param("menuId") int id);

    /**
     * 根据菜单级别查询菜单信息
     * @param level 菜单级别
     * @return  该级别菜单信息
     */
    List<Menu> findByLevel(@Param("level") int level);

    /**
     * 根据角色ID查询菜单
     * @param roleId    角色ID
     * @return  权限集合
     */
    LinkedHashSet<Menu> findMenuByRoleId(@Param("roleId") Integer roleId);

    /**
     * 查询全部菜单信息
     * @return  全部菜单信息
     */
    List<Menu> findAll();

}
